home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / webx / jpged26s.lzh / Load.s < prev    next >
Text File  |  1996-11-10  |  32KB  |  1,680 lines

  1. *
  2. *       LOAD.S
  3. *
  4. *
  5. *
  6.     include    DOSCALL.MAC
  7.     include    IOCSCALL.MAC
  8.     include    JPEG.MAC
  9.     include    work.inc
  10.     include    keycode.inc
  11.  
  12.     .text
  13. *
  14. *
  15.     .xref    GetBlock        'GETBLOCK.S'
  16.     .xref    write_nbytes        'GETBLOCK.S'
  17.     .xref    Get_Header        'GETHEAD.S'
  18.     .xref    Scroll            'SCROLL.S'
  19.     .xref    clear_area        'JPEG.S'
  20.     .xref    Memory_error        'ERROR.S'
  21.     .xref    temp_name,temp_file    'MES.S'
  22.     .xref    make_UQ_table        'MK_MUL_TBL.S'
  23.     .xref    Write_error        'ERROR.S'
  24.     .xref    int4c_bak        'MES.S'
  25.     .xref    mouse_sub_bak        'MES.S'
  26.     .xref    work_adrs        'MES.S'
  27.     .xref    Disp_Pic_Info        'GETHEAD.S'
  28. *
  29.     .xdef    Load,inkey
  30.     .xdef    init_vwork
  31.     .xdef    getmem_1block_line
  32. *
  33. *
  34. Load
  35. *âwâbâ_ë≡É═
  36. *----------------------------------
  37.     bsr    Get_Header
  38.  
  39.     cmp.b    #2,Action(a6)
  40.     beq    load_exit        -H╡╠▀╝«▌ÄwÆΦ(âwâbâ_é╠é▌ò\Ī)
  41.  
  42. *ïtù╩Äqë╗├░╠▐┘ì∞ɼ
  43. *---------------------
  44.     move.w    #1,Qlevel(a6)
  45.     bsr    SetQtable
  46.  
  47. *ôWèJùpé╠▄░╕┤╪▒èmò█
  48. *----------------------------------
  49.     move.l    free_adrs(a6),a2
  50.     move.l    free_size(a6),d5
  51.     move.l    #load_work_size-em_free_adrs,d1
  52.     adda.l    d1,a2
  53.     sub.l    d1,d5
  54.     bcs    Memory_error
  55.  
  56.     *ôWèJû╜ù▀▄░╕┤╪▒╗▓╜▐îvÄZ
  57.     *--------------------
  58.     move.l    a2,GETP_adrs(a6)
  59.     move.w    HE(a6),d1
  60.     sub.w    HS(a6),d1
  61.     addq.w    #1,d1
  62.     mulu.w    #4*2,d1
  63.     add.l    #12*2,d1
  64.     adda.l    d1,a2
  65.     sub.l    d1,d5
  66.     bcs    Memory_error
  67.     move.l    d1,GETP_size(a6)
  68.  
  69.     *ïtù╩Äqë╗ŵÄZ├░╠▐┘ì∞ɼüò╥╙╪èmò█
  70.     *---------------------
  71.     bsr    make_UQ_table
  72.     move.l    a2,buff_adrs(a6)
  73.     move.l    d5,buff_size(a6)
  74.  
  75. *  âAâXâyâNâgé╠òΓÉ│
  76. *-----------------------
  77.     btst.b    #5,Sys_flag(a6)
  78.     bne    adjust_Aspect_end    âAâXâyâNâgé╠Ä⌐ô«òΓÉ│ù}ɺ╡╠▀╝«▌ÄwÆΦ
  79.  
  80.     move.w    DCC_bits(a6),d0
  81.     swap.w    d0
  82.     move.w    DCL_bits(a6),d0
  83.     cmp.l    #17*65536+17,d0
  84.     bne    adjust_Aspect_1
  85.     cmp.l    #2*65536+3,Aspect(a6)
  86.     beq    set_Aspect_3_2
  87.  
  88. adjust_Aspect_1
  89.  
  90.     cmp.l    #16*65536+16,d0
  91.     bne    adjust_Aspect_end
  92.     cmp.w    #512,Xline(a6)
  93.     bne    adjust_Aspect_end
  94.     cmp.w    #512,Yline(a6)
  95.     bne    adjust_Aspect_end
  96.  
  97. set_Aspect_3_2
  98.  
  99.     move.l    #3*65536+2,Aspect(a6)
  100.     bset.b    #7,Sys_flag(a6)    *JPEG.X,JPGS.Xé┼ì∞éτéΩé╜ëµæ£é═RGBé╠ì┼æσÆlé¬252é╔é╡é⌐é╚éτé╚éó
  101.                 *é╠é┼é╗é╠é╜é▀é╠òΓÉ│ùpâtâëâOüié┴é─Ä└ì█é═òΓÉ│é╡é─é╚éóüj
  102. adjust_Aspect_end
  103.  
  104. *ëµû╩é╠èeÄφ▄░╕┤╪▒é≡Åëè·ë╗
  105. *------------------------
  106.     bsr    init_vwork
  107.  
  108. *╜╕█░┘ë┬ö\é╚╡╠▀╝«▌é⌐üH
  109. *--------------------
  110.     btst.b    #2,Sys_flag2(a6)
  111.     beq    load50    éαé╞éµéΦüAâXâNâìü[âïé╖éΘâIâvâVâçâôÄwÆΦé┼é═é╚éó
  112.  
  113.     btst.b    #0,Sys_flag(a6)
  114.     bne    @f        ╖░æ╥é┐ùLéΦé╚é╠é┼╜╕█░┘ùLéΦ
  115.     btst.b    #7,Sys_flag2(a6)
  116.     beq    load50        ╖░æ╥é┐é╚é╡é┼üA╡░─╜╕█░┘éαé╚é╡é╚é╠é┼üA╜╕█░┘é╚é╡
  117. @@
  118. *ôWèJîπâXâNâìü[âïò\ĪÅoùêéΘé⌐üH
  119. *----------------------
  120.     move.l    picture_size(a6),d2
  121.     add.l    #1024,d2        âtâ@âCâïô╟é▌ì₧é▌âoâbâtâ@ù\û±
  122.     cmp.l    buff_size(a6),d2
  123.     bcc    load20            ëµæ£æSæ╠é≡âüâéâèé╔ôWèJÅoùêé╚éó
  124.  
  125.     *ÅoùêéΘ
  126.     *----------------------------
  127.     sub.l    #1024,d2
  128.     move.l    d2,Scroll_size(a6)
  129.     bra    load11
  130.  
  131. *âXâNâìü[âïò\Īé┼âeâôâ|âëâèâtâ@âCâïé╔ôWèJ
  132. *----------------------------------------
  133. load20
  134.     btst.b    #1,Sys_flag(a6)
  135.     beq    load50            ├▌╬▀╫╪é╔ôWèJ╡╠▀╝«▌û│é╡é╚é╠é┼ôWèJîπ╜╕█░┘é╚é╡
  136.  
  137.     *ëíéPâuâìâbâNâëâCâôò¬é╠âüâéâèé≡ĵéΘ
  138.     *---------------------------------
  139.     bsr    getmem_1block_line
  140.  
  141.     *âeâôâ|âëâèâtâ@âCâïé╠âpâXé≡ĵô╛
  142.     *--------------------------------
  143.     lea.l    temp_path(a6),a0
  144.     tst.b    (a0)
  145.     bne    load21
  146.  
  147.     move.l    a0,-(sp)
  148.     clr.l    -(sp)
  149.     pea.l    temp_name(pc)
  150.     dos    _GETENV
  151.     lea.l    12(sp),sp
  152.     tst.l    d0
  153.     bpl    load21
  154.  
  155.     move.b    '.',(a0)        è┬ï½ò╧Éötempé¬É▌ÆΦé│éΩé─éóé╚éóÅΩìçé═
  156.     clr.b    1(a0)            âJâîâôâgâfâBâîâNâgâèé╔âeâôâ|âëâèâtâ@âCâïé≡ì∞éΘ
  157.  
  158.     *├▌╬▀╫╪╩▀╜é╔âtâ@âCâïû╝é≡Æ╟ë┴
  159.     *------------------------------
  160. load21
  161.     tst.b    (a0)+
  162.     bne    load21
  163.     subq.w    #1,a0
  164.     lea.l    temp_file(pc),a1
  165. load22
  166.     move.b    (a1)+,(a0)+
  167.     bne    load22
  168.  
  169.     *âeâôâ|âëâèâtâ@âCâïé≡âIü[âvâô
  170.     *----------------------------
  171.     move.w    #$20,-(sp)
  172.     pea.l    temp_path(a6)
  173.     dos    _MAKETMP
  174.     addq.w    #6,sp
  175.     tst.l    d0
  176.     bmi    load50            âIü[âvâôÅoùêé╚éóé╠é┼ôWèJîπé╠âXâNâìü[âïò\Īé═é╡é╚éó
  177.  
  178.     move.w  d0,temp_handle(a6)
  179.     bset.b  #2,Sys_flag(a6)        âeâôâ|âëâèé╔ôWèJé╖éΘâtâëâO
  180.  
  181. *âXâNâìü[âïé┼é╠âZâôâ^âèâôâOò\Īé╠ÅÇö⌡
  182. *------------------------------------
  183. load11
  184.  
  185.     clr.w    XS(a6)
  186.     clr.w    YS(a6)
  187.  
  188.     move.w    Xline(a6),d0
  189.     move.w    VSXsize(a6),d1
  190.     move.w    d0,XE(a6)
  191.     sub.w    d0,d1
  192.     bls    load12
  193.  
  194.     addq.w    #1,d1
  195.     lsr.w    d1
  196.     subq.w    #1,d0
  197.     add.w    d1,d0
  198.     move.w    d0,HE(a6)
  199.     move.w    d1,HS(a6)
  200.  
  201. load12
  202.  
  203.     move.w    Yline(a6),d0
  204.     move.w    VSYsize(a6),d1
  205.     move.w    d0,YE(a6)
  206.     sub.w    d0,d1
  207.     bls    load13
  208.  
  209.     addq.w    #1,d1
  210.     lsr.w    d1
  211.     subq.w    #1,d0
  212.     add.w    d1,d0
  213.     move.w    d0,VE(a6)
  214.     move.w    d1,VS(a6)
  215.  
  216. load13
  217.     bra    load70
  218.  
  219.  
  220. *ëµæ£ôWèJîπâXâNâìü[âïé╡é╚éóÅΩìç
  221. *------------------------------
  222. load50
  223.     *ëíéPâuâìâbâNâëâCâôò¬é╠âüâéâèé≡ĵéΘ
  224.     *-------------------------------
  225.     bsr    getmem_1block_line
  226.  
  227.     bclr.b    #2,Sys_flag2(a6)        âXâNâìü[âïé╡é╚éó
  228.  
  229.     *-f╡╠▀╝«▌é╠Åêù¥
  230.     *------------------------
  231.     cmp.b    #1,DispMod(a6)
  232.     bcs    load53                -f0é▄é╜é═-f╡╠▀╝«▌é╚é╡
  233.     bne    load51
  234.  
  235.     *æSëµû╩ê°é½ëäé╬é╡
  236.     *----------------------
  237.     move.w    HE(a6),d0
  238.     sub.w    HS(a6),d0
  239.     addq.w    #1,d0
  240.     move.w    d0,Interval(a6)
  241.     move.w    Xline(a6),Interval+2(a6)
  242.  
  243.     move.w    VE(a6),d0
  244.     sub.w    VS(a6),d0
  245.     addq.w    #1,d0
  246.     move.w    d0,Interval+4(a6)
  247.     move.w    Yline(a6),Interval+6(a6)
  248.     bra    load53
  249.  
  250.     *ÅcëíöΣé≡ò╧éªé╕é╔üAÅoùêéΘé╛é»æσé½é¡ò\Ī
  251.     *--------------------------
  252. load51
  253.     move.w    Xline(a6),d0        d0...Xline
  254.     move.w    Yline(a6),d1        d1...Yline
  255.  
  256.     move.w    HE(a6),d2
  257.     sub.w    HS(a6),d2
  258.     addq.w    #1,d2        DX
  259.  
  260.     move.w    VE(a6),d3
  261.     sub.w    VS(a6),d3
  262.     addq.w    #1,d3        DY
  263.  
  264.     move.w    d2,d4
  265.     lsr.w    #1,d4
  266.     add.w    d2,d4        DX*3/2
  267.  
  268.     *  Xline * DY/Yline
  269.     *-------------------
  270. load51_Y
  271.  
  272.     move.l    d0,d7
  273.     mulu.w    d3,d7
  274.     divu.w    d1,d7
  275.  
  276.     * DX >= Xline * DY/Yline
  277.     *------------------------
  278.     cmp.w    d7,d2
  279.     bcs    load51_Y2
  280.  
  281.     move.w  d3,Interval(a6)
  282.     bra    load51_Y_1
  283.  
  284.     * DX*3/2 >= Xline * DY/Yline
  285.     *----------------------------
  286. load51_Y2
  287.  
  288.     move.w    Aspect(a6),d6
  289.     cmp.w    Aspect+2(a6),d6
  290.     bne    load51_X
  291.     cmp.b    #3,DispMod(a6)
  292.     beq    load51_X        -f3âIâvâVâçâôÄ₧é═âhâbâgöΣé╠ò╧ìXé═é╡é╚éó
  293.  
  294.     cmp.w    d7,d4
  295.     bcs    load51_X
  296.  
  297.     move.l    #3*65536+2,Aspect(a6)
  298.     move.w    d3,d6
  299.     add.w    d6,d6
  300.     ext.l    d6
  301.     divu.w    #3,d6
  302.     move.w    d6,Interval(a6)
  303. load51_Y_1
  304.     move.w    d3,Interval+4(a6)
  305.     move.w    d1,Interval+2(a6)
  306.     move.w    d1,Interval+6(a6)
  307.     bra    load53
  308.  
  309.     *  DY >= Yline * DX*3/2/Xline
  310.     *----------------------------
  311. load51_X
  312.  
  313.     move.w    Aspect(a6),d6
  314.     cmp.w    Aspect+2(a6),d6
  315.     bne    load51_X2
  316.     cmp.b    #3,DispMod(a6)
  317.     beq    load51_X2        -f3âIâvâVâçâôÄ₧é═âhâbâgöΣé╠ò╧ìXé═é╡é╚éó
  318.  
  319.     move.w    d4,d7
  320.     mulu.w    d1,d7
  321.     divu.w    d0,d7
  322.     cmp.w    d7,d3
  323.     bcs    load51_X2
  324.  
  325.     move.l    #3*65536+2,Aspect(a6)
  326.     move.w    d2,Interval(a6)
  327.     move.w    d4,Interval+4(a6)
  328.     bra    load51_X_1
  329. *
  330. *  Yline * DX/Xline
  331. *
  332. load51_X2
  333.  
  334.     move.w    d2,Interval(a6)
  335.     move.w    d2,Interval+4(a6)
  336. load51_X_1
  337.     move.w    d0,Interval+2(a6)
  338.     move.w    d0,Interval+6(a6)
  339.  
  340. load53
  341.  
  342. *ëíò√îⁿé╠ò\ĪèJÄné╞ÅIù╣ê╩Æué≡îvÄZ
  343. *---------------------------------
  344.     move.w    Xline(a6),d0
  345.     sub.w    XS(a6),d0
  346.  
  347.     mulu    Interval(a6),d0
  348.     divu    Interval+2(a6),d0    d0=ëµû╩Åπé┼é╠âhâbâgÉö
  349.  
  350.     btst.b    #3,Sys_flag2(a6)
  351.     bne    load55        ê╩ÆuÄwÆΦéáéΦ
  352.  
  353.     move.w    VSXsize(a6),d1        âZâôâ^âèâôâOé╖éΘ
  354.     sub.w    d0,d1
  355.     bcs    load55
  356.     addq.w    #1,d1
  357.     lsr.w    d1
  358.     move.w    d1,HS(a6)
  359.  
  360.     *ëíò√îⁿé╠ò\ĪÅIù╣ê╩Æué¬ëµû╩ôαé╔Ä√é▄éΘéµéñé╔é╖éΘ
  361.     *---------------------------------------------
  362. load55
  363.  
  364.     add.w    HS(a6),d0
  365.     subq.w    #1,d0
  366.     move.w    HE(a6),d1        d1=ëµû╩Åπé┼é╠ëíò√îⁿò\ĪÅIù╣ê╩Æu(âIâvâVâçâôÄwÆΦé┼ò╧ìXéáéΦ)
  367.     cmp.w    d0,d1
  368.     bhi    load63
  369.     move.w    d1,d0
  370. load63
  371.     move.w    d0,HE(a6)
  372.  
  373. *Åcò√îⁿé╠ò\ĪèJÄné╞ÅIù╣ê╩Æué≡îvÄZ
  374. *-----------------------------------
  375.     move.w    Yline(a6),d0
  376.     sub.w    YS(a6),d0
  377.     mulu    Interval+4(a6),d0
  378.     divu    Interval+6(a6),d0
  379.  
  380.     btst.b    #3,Sys_flag2(a6)
  381.     bne    load64        ê╩ÆuÄwÆΦéáéΦ
  382.  
  383.     move.w    VSYsize(a6),d1    âZâôâ^âèâôâOé╖éΘ
  384.     sub.w    d0,d1
  385.     bcs    load64
  386.     addq.w    #1,d1
  387.     lsr.w    d1
  388.     move.w    d1,VS(a6)
  389.  
  390.     *Åcò√îⁿé╠ò\ĪÅIù╣ê╩Æué¬ëµû╩ôαé╔Ä√é▄éΘéµéñé╔é╖éΘ
  391.     *---------------------------------------------
  392. load64
  393.     add.w    VS(a6),d0
  394.     subq.w    #1,d0
  395.     move.w    VE(a6),d1
  396.     cmp.w    d0,d1
  397.     bhi    load66
  398.     move.w    d1,d0
  399. load66
  400.     move.w    d0,VE(a6)
  401.  
  402.  
  403. load70
  404. *ë╝æzëµû╩âtâ@âCâïâoâbâtâ@èmò█
  405. *--------------------------------
  406.     btst.b    #5,Sys_flag2(a6)
  407.     beq    load_get_VSF_buf_end    ╡╠▀╝«▌é═ë╝æzëµû╩âtâ@âCâïÄwÆΦé┼é═é╚éó
  408.  
  409.     bsr    getmem_1line
  410.     move.w    #1,-(sp)
  411.     pea.l    VSname(a6)
  412.     dos    _OPEN
  413.     addq.w    #4+2,sp
  414.     tst.l    d0
  415.     bpl    load_get_VSF_buf_ok    âtâ@âCâïé¬é╖é┼é╔æ╢ì▌é╡é─éóéΘ
  416.  
  417.     move.w    #$20,-(sp)
  418.     pea.l    VSname(a6)
  419.     dos    _CREATE
  420.     addq.w    #4+2,sp
  421.     tst.l    d0
  422.     bmi    Write_error        âtâ@âCâïé¬ì∞ɼÅoùêé╚éó
  423.  
  424. load_get_VSF_buf_ok
  425.  
  426.     move.w    d0,VShandle(a6)
  427.  
  428. load_get_VSF_buf_end
  429.  
  430. *ô╟é▌ì₧é▌âoâbâtâ@é╠èmò█
  431. *--------------------------------
  432.     bsr    getmem_file_buf
  433.  
  434. *âXü[âpâoâCâUü[âéü[âhé╓ê╚ì~
  435. *--------------------------------
  436.     clr.l    -(sp)
  437.     dos    _SUPER
  438.     move.l    d0,(sp)
  439.  
  440.     bsr    Get_vector
  441.  
  442. *âXâNâèü[âôâéü[âhÉ▌ÆΦ
  443. *--------------------------------
  444.     btst.b    #4,Sys_flag2(a6)
  445.     bne    load83            ë╝æzëµû╩é╔ôWèJé╚é╠é┼ëµû╩Åëè·ë╗é═é╡é╚éó
  446.  
  447.     btst.b    #1,Sys_flag2(a6)
  448.     bne    load80            -n╡╠▀╝«▌ÄwÆΦùLéΦüiÉ▌ÆΦé╡é╚éóüj
  449.  
  450.     *î╗ì▌é╠╜╕╪░▌╙░─▐ö╗ÆΦ
  451.     *-----------------------------
  452.     moveq.l    #-1,d1
  453.     iocs    _CRTMOD
  454.     cmp.w    #$0c,d0
  455.     beq    Load76
  456.  
  457.     *êßéñ╜╕╪░▌╙░─▐é╛é┴é╜
  458.     *-----------------------------
  459.     move.w    #$0c,d1
  460.     iocs    _CRTMOD
  461.     iocs    _G_CLR_ON
  462.     bra    load77
  463.  
  464.     *ô»é╢╜╕╪░▌╙░─▐é╛é┴é╜
  465.     *-----------------------------
  466. Load76
  467.     move.w    #$10c,d1
  468.     iocs    _CRTMOD
  469.     moveq.l    #2,d1                text clrar
  470.     moveq.l    #$2a,d0
  471.     trap    #15
  472.     moveq.l    #3,d1
  473.     iocs    $91
  474.     ori.w    #%0000_0000_0000_1111,$e8002a    Graphic Fast Clear
  475.     move.w    #2,$e80480
  476. @@    btst.b    #1,$e80480+1
  477.     bnz    @b
  478.  
  479.     move.w    #%0000_0000_0010_1111,d1
  480.     iocs    $93
  481. load77
  482.     moveq.l    #0,d2
  483.     moveq.l    #0,d3
  484.     bsr    set_HOME
  485.  
  486.     *âhâbâgöΣé¬éPüFéPé╠ÅΩìçÉ│ò√î`âéü[âhé╔é╖éΘ
  487.     *-------------------------
  488. load80
  489.     cmp.b    #1,DispMod(a6)
  490.     beq    load82        æSëµû╩é╔ê°é½ëäé╬é╡é╠ÅΩìçé═É│ò√î`âéü[âhé╔é╡é╚éó
  491.  
  492.     move.w    Aspect(a6),d0
  493.     cmp.w    Aspect+2(a6),d0
  494.     bne    load82        É│ò√î`é┼é═é╚éó
  495.     bsr    Square
  496. load82
  497.     *â}âEâXé╠Åëè·ë╗
  498.     *---------------------------
  499.     iocs    _MS_INIT
  500.     moveq.l    #0,d1
  501.     iocs    _SKEY_MOD
  502.     iocs    _MS_CUROF
  503.  
  504.     moveq.l    #$0000_0000,d1
  505.     move.l    #$01ff_01ff,d2
  506.     iocs    _MS_LIMIT
  507.     move.l    #$0100_0100,d1
  508.     iocs    _MS_CURST
  509.  
  510.     *ü@âJü[â\âïé≡Å┴é╖
  511.     *-------------------
  512.     move.w    #18,-(sp)
  513.     dos    _CONCTRL
  514.     addq.w    #2,sp
  515.  
  516. *ôWèJò\Ī
  517. *---------------------------
  518. load83
  519.     move.l    sp,ErrorStackPoint(a6)
  520.     bsr    GetBlock        ëµæ£ôWèJ
  521.     tst.l    d0
  522.     bmi    load_end        ï¡ÉºÅIù╣
  523.  
  524.         move.b    #1,DecodeStatus(a6)
  525.         bra    Load84
  526.  
  527. .xdef LoadForceContinue
  528. LoadForceContinue            *ëµæ£é╔ê┘Åφé¬ùLé┴é─éαüAï¡ÉºÅIù╣é╡é╚éóÅΩìçüA
  529.                     *GetBlocké╠Æåé⌐éτé▒é▒é╔ö≥é±é┼é¡éΘ
  530.         move.b    #-1,DecodeStatus(a6)
  531. Load84
  532.         clr.l    ErrorStackPoint(a6)
  533.  
  534.         *ëµæ£Åεò±ò\Īùvïüé¬éáéΘÅΩìçé═ò\Īé╖éΘüiÅ≤æ╘ìÇû┌ìXÉVé╠ê╫)
  535.         *-------------------------
  536.         btst.b    #0,Sys_flag3(a6)
  537.         beq    @f
  538.         bsr    Disp_Pic_Info    
  539. @@
  540.  
  541. *ë╝æzëµû╩âtâ@âCâïé≡ò┬é╢éΘ
  542. *----------------------------
  543.     btst.b    #5,Sys_flag2(a6)
  544.     beq    close_VSfile_end
  545.  
  546.     *ë╝æzëµû╩âtâ@âCâïâTâCâYîvÄZ
  547.     *-----------------------------
  548.     move.w    VSXsize(a6),d5
  549.     mulu.w    VSYsize(a6),d5
  550.     add.l    d5,d5
  551.  
  552.     *î╗ì▌é╠ë╝æzëµû╩âtâ@âCâïâTâCâYé≡ĵô╛
  553.     *-----------------------------
  554.     move.w    #2,-(sp)
  555.     clr.l    -(sp)
  556.     move.w    VShandle(a6),-(sp)
  557.     dos    _SEEK
  558.     addq.w    #2+4+2,sp
  559.     tst.l    d0
  560.     bmi    Write_error
  561.  
  562.     sub.l    d0,d5
  563.     bls    close_VSfile
  564.  
  565.     move.l    d5,d0
  566.     move.l    buff_size(a6),d5
  567.     cmp.l    d0,d5
  568.     bls    clear_VSfile
  569.     move.l    d0,d5
  570. clear_VSfile
  571.     move.l    Scroll_Area(a6),a5
  572.     movem.l    d0/d5/a5,-(sp)        d5=clear memory size
  573.     bsr    clear_area        d0=clear file size
  574.     movem.l    (sp)+,d0/d5/a5
  575.     exg.l    d0,d5            d5=write file size
  576.     bsr    write_nbytes        d0=write memory size
  577.  
  578. close_VSfile
  579.  
  580.     move.w    VShandle(a6),-(sp)
  581.     dos    _CLOSE
  582.     addq.w    #2,sp
  583.     tst.l    d0
  584.     bmi    Write_error
  585.  
  586. close_VSfile_end
  587.  
  588. *âXâNâìü[âïò\Īë┬ö\é⌐
  589. *----------------------------
  590.     btst.b    #2,Sys_flag2(a6)
  591.     beq    load90            âXâNâìü[âïò\Īé═é╡é╚éó
  592.  
  593.     btst.b    #2,Sys_flag(a6)
  594.     beq    load87            ├▌╬▀╫╪é╔ôWèJé═é╡é─éóé╚éó
  595.  
  596.     btst.b    #3,Sys_flag(a6)
  597.     bne    load90            âfâBâXâNâtâï
  598.  
  599.     *ôWèJîπòsùpé╔é╚é┴é╜▄░╕┤╪▒é≡ë≡ò·é╡é─üA├▌╬▀╫╪é╔ôWèJé╡é╜ëµæ£é¬ô╟é▌ì₧é▀éΘé⌐üH
  600.     *------------------------------
  601.     movea.l    free_adrs(a6),a0
  602.     move.l    a0,GETP_adrs(a6)
  603.     adda.l    GETP_size(a6),a0
  604.     move.l    a0,Scroll_Area(a6)
  605.  
  606.     move.l    free_size(a6),d0
  607.     sub.l    GETP_size(a6),d0
  608.     sub.l    picture_size(a6),d0
  609.     bcs    load87            ô╟é▌ì₧é▀é╚éó
  610.  
  611.     *╥»╛░╝▐ô╟é▌ì₧é▌╩▐»╠º▄░╕ìXÉV
  612.     *------------------------------
  613.     cmp.l    #1024,d0
  614.     bcs    load87
  615.     move.l    #65535,d1
  616.     cmp.l    d1,d0
  617.     bls    @f
  618.     move.l    d1,d0
  619. @@
  620.     move.l    d0,buf_size(a6)
  621.  
  622.     *ëµæ£æSæ╠é≡ô╟é▌ì₧é▐
  623.     *------------------------------
  624.     clr.w    -(sp)
  625.     clr.l    -(sp)
  626.     move.w    temp_handle(a6),-(sp)
  627.     dos    _SEEK            âtâ@âCâïé╠ɵô¬é╓
  628.  
  629.     move.l    picture_size(a6),-(sp)
  630.     move.l    Scroll_Area(a6),-(sp)
  631.     move.w    temp_handle(a6),-(sp)
  632.     dos    _READ
  633.     lea.l    8+10(sp),sp        ëµæ£é≡æSòöô╟é▌ì₧é▐
  634.  
  635.     bsr    close_temp        ├▌╬▀╫╪╠º▓┘é≡ìφÅ£
  636.  
  637.  
  638. *âXâNâìü[âïò\Ī
  639. *------------------------------
  640. load87
  641.     bsr    Scroll
  642.     bra    load_end_adjust_home
  643.  
  644. *ôWèJò\Īîπé╠âLü[ôⁿù═æ╥é┐
  645. *------------------------------
  646. load90
  647.     btst.b    #0,Sys_flag(a6)
  648.     beq    load_end_adjust_home    âLü[ôⁿù═æ╥é┐╡╠▀╝«▌é╚é╡
  649. @@
  650.     dc.w    $ffff
  651.  
  652.     bsr    inkey
  653.     tst.l    d0
  654.     beq    @b
  655.  
  656. load_end_adjust_home
  657.  
  658.     bsr    pic_home_adjust
  659.  
  660. *ò\ĪÅIù╣
  661. *-------------------------------
  662. load_end
  663.     *æ╝▒╠▀╪(G_VIEW)ùpé╔ëµû╩é╠Homeê╩Æué≡É▌ÆΦ
  664.     *-----------------------------
  665.     bsr    set_HOME_for_apli
  666.  
  667.     *├▌╬▀╫╪╠º▓┘ìφÅ£
  668.     *-------------------------------
  669.     bsr    close_temp
  670.  
  671.     *éαé╡╥»╛░╝▐é≡ò\Īé╡é─éóé╜éτÅ┴ïÄé╡é─ÅIù╣
  672.     *-------------------------------
  673. @@
  674.     btst.b    #0,Sys_flag3(a6)
  675.     beq    @f
  676.     bsr    inkey_undo
  677.     bra    @b
  678. @@
  679.     *â}âEâXÅëè·ë╗
  680.     *-------------------------------
  681.     btst.b    #5,Sys_flag2(a6)
  682.     bne    load_end_VS        ë╝æzëµû╩é╔ôWèJé╡é╜ÅΩìçé═üAë╜éαé╡é╚éóé┼ÅIù╣
  683.  
  684.     iocs    _MS_INIT
  685.     moveq.l    #-1,d1
  686.     iocs    _SKEY_MOD
  687.  
  688.     *âJü[â\âïò\Ī
  689.     *--------------------------------
  690.     move.w    #17,-(sp)
  691.     dos    _CONCTRL
  692.     addq.w    #2,sp
  693.  
  694.     *âåü[âUü[âéü[âhé╓ò£ïA
  695.     *-------------------------------
  696. load_end_VS
  697.  
  698.     bsr    Restore_vector
  699.     clr.w    -(sp)
  700.     DOS    _KFLUSH
  701.     addq.l    #2,sp
  702.     dos    _SUPER
  703.     addq.w    #4,sp
  704.  
  705. load_exit
  706.  
  707.     dos    _EXIT
  708.  
  709. *******************************************************************
  710. *
  711. *    ëµû╩âTâCâYéµéΦüAèe▄░╕é≡Åëè·ë╗
  712. *
  713. *******************************************************************
  714. init_vwork
  715.  
  716.     *  ëµæ£é╠Åc,ëíé╠╠▐█»╕Éö, ╠▐█»╕é╠Åcëíé╠─▐»─Éöé≡îvÄZ
  717.     *--------------------------------
  718.     move.w    Xline(a6),d1
  719.     move.w    Yline(a6),d2
  720.     moveq.l    #8,d3
  721.     moveq.l    #8,d4
  722.  
  723.     addq.w    #7,d1
  724.     addq.w    #7,d2
  725.     lsr.w    #3,d1
  726.     lsr.w    #3,d2
  727.  
  728.     move.b    uvmode(a6),d0
  729.     subq.b    #1,d0
  730.     beq    @f
  731.  
  732.     add.w    d3,d3
  733.     addq.w    #1,d1
  734.     bclr.l    #0,d1
  735.  
  736.     subq.b    #1,d0
  737.     beq    @f
  738.  
  739.     add.w    d4,d4
  740.     addq.w    #1,d2
  741.     bclr.l    #0,d2
  742. @@
  743.     move.w    d1,BlkX(a6)        ëíò√îⁿé╠âuâìâbâNÉö
  744.     move.w    d2,BlkY(a6)        Åcò√îⁿé╠âuâìâbâNÉö
  745.     move.w    d3,DeltaX(a6)        1╠▐█»╕ò╙éΦé╠ëíé╠─▐»─Éö
  746.     move.w    d4,DeltaY(a6)        1╠▐█»╕ò╙éΦé╠Åcé╠─▐»─Éö
  747.  
  748.     *  ëµæ£é╠Ägùp╥╙╪ùeù╩é≡îvÄZ
  749.     *--------------------------------
  750.     lsl.w    #3,d1
  751.     lsl.w    #3,d2
  752.     mulu.w    d1,d2
  753.     add.l    d2,d2            d2=Ägùpâüâéâèùeù╩
  754.     move.l    d2,picture_size(a6)
  755.  
  756.     moveq.l    #0,d1
  757.     move.w    BlkX(a6),d1
  758.     lsl.l    #3+1,d1
  759.     move.l    d1,HScroll_size(a6)
  760.     lsl.l    #3,d1
  761.     move.l    d1,lx(a6)
  762.     move.l    buff_adrs(a6),Scroll_Area(a6)
  763.  
  764.     moveq.l    #0,d0
  765.     move.w    VSXsize(a6),d0
  766.     add.l    d0,d0
  767.     move.l    d0,VSXbyte(a6)
  768.     rts
  769.  
  770.  
  771. *******************************************************************
  772. *
  773. *    ëíéPâuâìâbâNâëâCâôò¬é╠âüâéâèé≡ĵéΘ
  774. *
  775. *******************************************************************
  776. getmem_1block_line
  777.  
  778.     move.w    BlkX(a6),d0
  779.     mulu.w    DeltaY(a6),d0
  780.     lsl.l    #3+1,d0
  781.     cmp.l    buff_size(a6),d0
  782.     bcc    Memory_error            èmò█Åoùêé╚éóé╠é┼âGâëü[
  783.     move.l    d0,Scroll_size(a6)
  784.     bset.b    #4,Sys_flag(a6)
  785.     rts
  786.  
  787. *******************************************************************
  788. *
  789. *    ëµû╩ëíéPâëâCâôò¬é╠âüâéâèé≡ĵéΘ
  790. *
  791. *******************************************************************
  792. .xdef getmem_1line
  793. getmem_1line
  794.     movea.l    Scroll_Area(a6),a0
  795.     adda.l    Scroll_size(a6),a0
  796.     move.l    a0,VSFile_buf_adrs(a6)
  797.     moveq.l    #0,d0
  798.     move.w    HE(a6),d0
  799.     sub.w    HS(a6),d0
  800.     addq.w    #1,d0
  801.     add.l    d0,d0
  802.     cmp.l    buff_size(a6),d0
  803.     bcc    Memory_error            èmò█Åoùêé╚éóé╠é┼âGâëü[
  804.     move.l    d0,VSFile_buf_size(a6)
  805.     rts
  806.  
  807. *******************************************************************
  808. *
  809. *    ╠º▓┘▒╕╛╜╩▐»╠ºé╠èmò█
  810. *
  811. *******************************************************************
  812.     .xdef    getmem_file_buf
  813. getmem_file_buf
  814.     movea.l    Scroll_Area(a6),a0
  815.     adda.l    Scroll_size(a6),a0
  816.     adda.l    VSFile_buf_size(a6),a0
  817.     move.l    a0,buf_adrs(a6)
  818.     move.l    buff_size(a6),d0
  819.     sub.l    Scroll_size(a6),d0
  820.     bls    Memory_error
  821.     sub.l    VSFile_buf_size(a6),d0
  822.     bls    Memory_error
  823.     cmp.l    #65535,d0
  824.     bls    getmem_file_buf72
  825.     move.l    #65535,d0
  826. getmem_file_buf72
  827.     move.l    d0,buf_size(a6)
  828.     rts
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839. ******************************************************************************
  840. *
  841. *   INKEY
  842. *
  843. *    ôⁿù═    é╚é╡
  844. *    Åoù═    d6,d7.....x,yê┌ô«ù╩
  845. *        d5........z(ègæσÅkżù╩)
  846. *    öjë≤    d0-d5,a0-a2
  847. *
  848. ******************************************************************************
  849. inkey
  850. *â}âEâXâfü[â^ô╟é▌ì₧é▌
  851. *-------------------------
  852.     *ÅIù╣é⌐
  853.     *-------------------
  854.     iocs    _MS_GETDT
  855.     cmp.w    #$ff_ff,d0
  856.     beq    inkey_end_key2        ÅIù╣é┼éáéΘ
  857.  
  858.     move.w    MOUSE_TZ(a6),d5
  859.  
  860.     *âJü[â\âïê╩Æuô╟é▌ì₧é▌
  861.     *-------------------
  862.     iocs    _MS_CURGT
  863.     move.w    d0,d7
  864.     swap.w    d0
  865.     move.w    d0,d6
  866.     sub.w    #$100,d6
  867.     bcs    inkey_ms_posx_sub
  868.     add.w    MOUSE_TX(a6),d6
  869.     bcc    inkey_ms_posy
  870.     move.w    #$ffff,d6
  871.     bra    inkey_ms_posy
  872. inkey_ms_posx_sub
  873.     add.w    MOUSE_TX(a6),d6
  874.     bcs    inkey_ms_posy
  875.     moveq.l    #0,d6
  876.  
  877. inkey_ms_posy
  878.  
  879.     sub.w    #$100,d7
  880.     bcs    inkey_ms_posy_sub
  881.     add.w    MOUSE_TY(a6),d7
  882.     bcc    inkey_keyboard
  883.     move.w    #$ffff,d7
  884.     bra    inkey_keyboard
  885. inkey_ms_posy_sub
  886.     add.w    MOUSE_TY(a6),d7
  887.     bcs    inkey_keyboard
  888.     moveq.l    #0,d7
  889.  
  890. inkey_keyboard
  891.  
  892.     move.l    #$0100_0100,d1
  893.     iocs    _MS_CURST
  894.  
  895.  
  896. *âLü[ôⁿù═
  897. *-------------------
  898. inkey_loop
  899.         lea.l    Key_jmp_tbl(pc),a2
  900.  
  901. inkey_loop1
  902.         move.w    (a2)+,d0
  903.         beq    inkey_special
  904.  
  905.         lea.l    Key_work(a6),a1
  906.         add.w    d0,a1
  907.         bsr    get_key_time
  908.         move.w    (a2)+,d0
  909.         tst.w    d1
  910.         beq    inkey_loop1
  911.         bset.b    #2,Sys_flag3(a6)
  912.         jsr    inkey_loop(pc,d0.w)
  913.         bra    inkey_loop1
  914. inkey_special
  915.         move.w    (a2)+,d0
  916.         beq    inkey_end
  917.  
  918.         lea.l    Key_work(a6),a1
  919.         add.w    d0,a1
  920.         bsr    get_key_time
  921.         move.w    (a2)+,d0
  922.         tst.w    d1
  923.         beq    inkey_special
  924.         jsr    inkey_loop(pc,d0.w)
  925.         bra    inkey_special
  926.  
  927. inkey_end_key
  928.         addq.l    #4,sp
  929. inkey_end_key2
  930.         moveq.l    #-1,d0
  931.         rts
  932.  
  933. inkey_end
  934.     move.w    Xline(a6),d0
  935.     cmp.w    d0,d6
  936.     bls    @f
  937.     move.w    d0,d6
  938.     subq.w    #1,d6
  939. @@
  940.  
  941.     move.w    Yline(a6),d0
  942.     cmp.w    d0,d7
  943.     bcs    @f
  944.     move.w    d0,d7
  945.     subq.w    #1,d7
  946. @@
  947.     move.w    d6,MOUSE_TX(a6)
  948.     move.w    d7,MOUSE_TY(a6)
  949.     moveq.l    #0,d0
  950.     rts
  951.  
  952. inkey_up
  953.     sub.w    d1,d7
  954.     bcc    @f
  955.     moveq.l    #0,d7
  956. @@:    rts
  957.  
  958. inkey_down
  959.     add.w    d1,d7
  960.     bcc    @f
  961.     moveq.l    #-1,d7
  962. @@:    rts
  963.  
  964. inkey_left
  965.         sub.w    d1,d6
  966.         bcc    @f
  967.         moveq.l    #0,d6
  968. @@:        rts
  969.  
  970. inkey_right
  971.         add.w    d1,d6
  972.         bcc    @f
  973.         moveq.l    #-1,d6
  974. @@:        rts
  975.  
  976. inkey_zoomin
  977.         add.w    d1,d5
  978.         bcs    1f
  979.  
  980.         move.w    Maxline(a6),d0
  981. *        add.w    #512-1,d0
  982.         add.w    d0,d0
  983.         subq.w    #1,d0
  984. *
  985.  
  986.         cmp.w    d0,d5
  987.         bls    2f
  988. 1        move.w    d0,d5
  989. 2        rts
  990.  
  991. inkey_zoomout
  992.         sub.w    d1,d5
  993.         bls    1f
  994.  
  995.         cmp.w    #1,d5
  996.         bhi    2f
  997. 1
  998.         moveq.l    #1,d5
  999. 2
  1000.         moveq.l    #0,d0
  1001.         move.w    Maxline(a6),d0
  1002.         cmp.w    d0,d5
  1003.         bhi    inkey_zoomout_end
  1004.  
  1005.         lsr.l    #16-9,d0
  1006.         addq.w    #1,d0
  1007.         cmp.w    d0,d5
  1008.         bcc    inkey_zoomout_end
  1009.  
  1010.         move.w    d0,d5
  1011.  
  1012. inkey_zoomout_end
  1013.         rts
  1014.  
  1015. *-----------------------------
  1016. *ò\Īê╩ÆuüAò\Īö{ùªé≡├▐╠½┘─é╓
  1017. *-----------------------------
  1018. inkey_home
  1019.         bclr.b    #2,Sys_flag3(a6)
  1020.         bnz    inkey_home_first
  1021.  
  1022.         move.b    Home_key_time(a6),d0
  1023.         tst.b    d0
  1024.         bne    inkey_home_next
  1025.  
  1026.     *ì┼Åëé╠Home╖░é¬ëƒé│éΩé╜ÅΩìçé╠Åêù¥
  1027.     *-------------------------
  1028. inkey_home_first
  1029.         move.w    Maxline(a6),d5
  1030.         move.w    Xline(a6),d6
  1031.         move.w    Yline(a6),d7
  1032.         lsr.w    d6
  1033.         lsr.w    d7
  1034.         bra    inkey_home_end
  1035.  
  1036.     *ô±ë±û┌é╠Home╖░é¬ëƒé│éΩé╜ÅΩìçé╠Åêù¥
  1037.     *ü@ëµæ£é≡ëµû╩é╠╗▓╜▐é╔ìçéφé╣éΘ
  1038.     *-------------------------
  1039. inkey_home_next
  1040.         *ò\Īö{ùªé≡╖░▄░╕é╞ô»é╢î`Ä«é╔ò╧è╖
  1041.         *----------------------
  1042.         move.w    Maxline(a6),d5
  1043.         move.w    #512,d0
  1044.         cmp.w    d0,d5
  1045.         bcs    1f        ègæσò√îⁿé╓
  1046.  
  1047.             *Åkż
  1048.             *---------------------
  1049.             move.w    d0,d5
  1050.             bra    2f
  1051.             *ègæσ
  1052.             *----------------------
  1053. 1
  1054.             move.w    d0,d5
  1055. 2
  1056.         *ëµæ£é╠╬░╤ê╩Æué≡îvÄZ
  1057.         *----------------------
  1058.         move.w    Xline(a6),d6
  1059.         move.w    Yline(a6),d7
  1060.         lsr.w    d6
  1061.         lsr.w    d7
  1062. inkey_home_end
  1063.  
  1064.         move.b    Home_key_time(a6),d0
  1065.         addq.b    #1,d0
  1066.         cmp.b    #2,d0
  1067.         bcs    @f
  1068.         moveq.l    #0,d0
  1069. @@
  1070.         move.b    d0,Home_key_time(a6)
  1071.         rts
  1072.  
  1073. *----------------------
  1074. *ëµæ£Åεò±é≡ò\Ī
  1075. *----------------------
  1076. inkey_undo
  1077.         btst.b    #4,Sys_flag2(a6)
  1078.         bnz    inkey_undo_end
  1079.  
  1080.         btst.b    #0,Sys_flag3(a6)
  1081.         beq    inkey_undo_disp1
  1082.  
  1083.         bchg.b    #1,Sys_flag3(a6)
  1084.         bne    inkey_undo_disp2
  1085.  
  1086.     *ò\ĪÆåé┼üAö╝èKÆ▓é╔É▌ÆΦ
  1087.     *----------------------------
  1088.         move.w    #$1b3f,$e82600
  1089.         rts
  1090.  
  1091.     *ò\Ī
  1092.     *----------------------------
  1093. inkey_undo_disp1
  1094.         bset.b    #0,Sys_flag3(a6)
  1095.         bsr    cls_text
  1096.         bra    Disp_Pic_Info
  1097.  
  1098.  
  1099.     *ò\Īë≡Å£
  1100.     *----------------------------
  1101. inkey_undo_disp2
  1102.         bclr.b    #0,Sys_flag3(a6)
  1103.         bclr.b    #1,Sys_flag3(a6)
  1104.         bsr    cls_text
  1105.         move.w    #$003f,$e82600
  1106. inkey_undo_end
  1107.         rts
  1108.  
  1109.  
  1110. get_key_time
  1111.         move.w    4(a1),d1
  1112.         clr.w    4(a1)
  1113.         move.w    (a1),d0
  1114.         cmp.w    #$ffff,d0
  1115.         beq    get_key_time_end
  1116.  
  1117.         move.w    $9cc.w,d2
  1118.         sub.w    d2,d0
  1119.         bcc    @f        ╡░╩▐░╠█░é╡é─éóé╚éó
  1120.         add.w    $9ca.w,d0
  1121. @@
  1122.         add.w    d0,d0
  1123.         cmp.w    #$fffe,2(a1)
  1124.         bhi    get_key_time_1    ╪╦▀░─Æå
  1125.         beq    @f        ╪╦▀░─èJÄnæ╥é┐Æå
  1126.  
  1127.         move.w    #$fffe,2(a1)    ì┼Åëé╠key oné╠Åêù¥é≡é╡é╜é▒é╞é≡â}ü[âN
  1128.         moveq.l    #1,d0
  1129.         bra    get_key_time_2
  1130. @@
  1131.         sub.w    #20*2,d0
  1132.         bls    get_key_time_end    é▄é╛╪╦▀░─èJÄné┼é═é╚éó
  1133.         move.w    #$ffff,2(a1)    ╪╦▀░─Æåé┼éáéΘÄûé≡â}ü[âN
  1134. get_key_time_1
  1135.         move.w    d2,(a1)
  1136.  
  1137.     *ê┌ô«ìéæ¼ë╗╖░┴¬»╕
  1138.     *------------------------------
  1139. get_key_time_2
  1140.         bsr    chk_key_fast
  1141.         add.w    d0,d1
  1142. get_key_time_end
  1143.         rts
  1144.  
  1145.  
  1146. Key_jmp_tbl
  1147.     *Æ╩Åφé╠╖░Åêù¥
  1148.     *-------------------------
  1149.         .dc.w    K_Up*6,inkey_up-inkey_loop
  1150.         .dc.w    K_T2*6,inkey_up-inkey_loop
  1151.  
  1152.         .dc.w    K_Down*6,inkey_down-inkey_loop
  1153.         .dc.w    K_T8*6,inkey_down-inkey_loop
  1154.  
  1155.         .dc.w    K_Right*6,inkey_right-inkey_loop
  1156.         .dc.w    K_T4*6,inkey_right-inkey_loop
  1157.  
  1158.         .dc.w    K_Left*6,inkey_left-inkey_loop
  1159.         .dc.w    K_T6*6,inkey_left-inkey_loop
  1160.  
  1161.         .dc.w    K_PgUp*6,inkey_zoomout-inkey_loop
  1162.         .dc.w    K_PgDn*6,inkey_zoomin-inkey_loop
  1163.  
  1164.         .dc.w    K_Esc*6,inkey_end_key-inkey_loop
  1165.         .dc.w    K_BkSp*6,inkey_end_key-inkey_loop
  1166.         .dc.w    K_Enter*6,inkey_end_key-inkey_loop
  1167.         .dc.w    K_Space*6,inkey_end_key-inkey_loop
  1168.  
  1169.         .dc.w    K_Undo*6,inkey_undo-inkey_loop
  1170.  
  1171.         .dc.w    $80*6,inkey_zoomout-inkey_loop
  1172.         .dc.w    $81*6,inkey_zoomin-inkey_loop
  1173.  
  1174.         .dc.w    0
  1175.  
  1176.     *é┐éσé┴é╞ô┴ò╩é╚╖░Åêù¥
  1177.     *-------------------------
  1178.         .dc.w    K_Home*6,inkey_home-inkey_loop
  1179.  
  1180.         .dc.w    0
  1181.  
  1182. ***********************
  1183. *
  1184. *    ê┌ô«ìéæ¼ë╗âLü[â`âFâbâN
  1185. *
  1186. *    ôⁿù═    d0    ê┌ô«ù╩
  1187. *    Åoù═    d0    ê┌ô«ù╩
  1188. *    öjë≤    û│é╡
  1189. ***********************
  1190. .xdef chk_key_fast
  1191. chk_key_fast
  1192.         cmp.w    #$ffff,Key_work+K_Ctrl*6(a6)
  1193.         bne    3f            Ctrlô»Ä₧ëƒé╡
  1194.         cmp.w    #$ffff,Key_work+K_Opt1*6(a6)
  1195.         bne    3f            Opt.1ô»Ä₧ëƒé╡
  1196.  
  1197.         btst.b    #3,Sys_flag3(a6)
  1198.         bne    1f            TV ctrl╖░éαê┌ô«ìéæ¼ë╗╖░é╞é╡é─ï¡ÉºÄgùp
  1199.  
  1200.         btst.b    #0,$ed0027
  1201.         beq    4f            Opt.2é═TV ctrl
  1202.         bra    2f            Opt.2é═normal
  1203. 1:
  1204.         cmp.w    #$ffff,Key_work+K_Shift*6(a6)
  1205.         bne    3f            Shiftô»Ä₧ëƒé╡
  1206. 2:
  1207.         cmp.w    #$ffff,Key_work+K_Opt2*6(a6)
  1208.         bne    3f            Opt.2ô»Ä₧ëƒé╡
  1209.         bra    4f
  1210. 3:
  1211.         lsl.w    #2,d0
  1212. 4:
  1213.         rts
  1214. ******************************************************************************
  1215. *
  1216. *   âxâNâ^ĵô╛
  1217. *
  1218. ******************************************************************************
  1219. Get_vector
  1220. *Ctrl-Cé╞âvâìâZâXé╠âAâ{ü[âgâxâNâ^é≡ò╧ìXé╖éΘ
  1221. *--------------------------------------------
  1222.         pea.l    abort_process(pc)
  1223.         move.w    #_CTRLVC,-(sp)
  1224.         DOS    _INTVCS
  1225.         addq.w    #6,sp
  1226.  
  1227.         pea.l    abort_process(pc)
  1228.         move.w    #_ERRJVC,-(sp)
  1229.         DOS    _INTVCS
  1230.         addq.w    #6,sp
  1231.  
  1232. *KEY BUFFER FULLèäéΦì₧é▌é╠âxâNâ^é≡ŵé┴ĵéΘ
  1233. *--------------------------------------------
  1234.     *Key_worké≡Åëè·ë╗
  1235.     *--------------------------------
  1236.         lea.l    Key_work(a6),a0
  1237.         move.l    #$ffff0000,d0
  1238.         move.w    #128+2-1,d1
  1239. @@
  1240.         move.l    d0,(a0)+
  1241.         move.w    d0,(a0)+
  1242.         dbra    d1,@b
  1243.  
  1244.     *═▐╕└é≡Åëè·ë╗
  1245.     *-------------------------------
  1246.         *î│═▐╕└é≡ĵô╛
  1247.         *---------------------
  1248.         move.w    #$4c,-(sp)
  1249.         DOS    _INTVCG
  1250.         addq.l    #2,sp
  1251.         lea.l    int4c_bak(pc),a0
  1252.         move.l    d0,(a0)
  1253.         *═▐╕└é≡Åæé½æ╓éª
  1254.         *---------------------
  1255.         pea    int4c(pc)
  1256.         move.w    #$4c,-(sp)
  1257.         DOS    _INTVCS
  1258.         addq.l    #2+4,sp
  1259.  
  1260. *╧│╜Ä≤ÉM╖¼╫╕└ùLî°èäéΦì₧é▌Åêù¥ôαé⌐éτ║░┘é│éΩéΘ═▐╕└é╠êΩé┬é≡ŵé┴ĵéΘ
  1261. *--------------------------------------------
  1262.         lea.l    mouse_sub_bak(pc),a0
  1263.         move.l    $934.w,(a0)
  1264.         lea.l    mouse_int(pc),a0
  1265.         move.l    a0,$934.w
  1266.         rts
  1267. ******************************************************************************
  1268. *
  1269. *   âxâNâ^ò£ïA
  1270. *
  1271. ******************************************************************************
  1272. .xdef    Restore_vector
  1273. Restore_vector
  1274.         move.l    int4c_bak(pc),d0
  1275.         beq    Restore_vector_4c_end    ═▐╕└╠»╕é╡é─éóé╚éó
  1276.         move.l    d0,-(sp)
  1277.         move.w    #$4c,-(sp)
  1278.         DOS    _INTVCS
  1279.         addq.l    #2+4,sp
  1280. Restore_vector_4c_end
  1281.  
  1282.         move.l    mouse_sub_bak(pc),d0
  1283.         beq    Restore_vector_mouse_end    ═▐╕└╠»╕é╡é─éóé╚éó
  1284.         move.l    d0,$934.w
  1285. Restore_vector_mouse_end
  1286.  
  1287.         rts
  1288. *******************************************************
  1289. *
  1290. *    Ctrl-Cé▄é╜é═Åêù¥é≡ÆåÆfé│éΩé╜ÅΩìçé╠Åêù¥
  1291. *
  1292. *    input    none
  1293. *    output    none
  1294. *    break    d0.l,d1.l
  1295. *******************************************************
  1296. abort_process
  1297.         move.l    work_adrs(pc),a6
  1298.         bsr    Restore_vector
  1299.         bsr    set_HOME_for_apli
  1300.         clr.w    -(sp)
  1301.         DOS    _KFLUSH
  1302.         move.w    #-1,(sp)
  1303.         DOS    _EXIT2
  1304. *******************************************************
  1305. *
  1306. *    Key Buffer Full èäéΦì₧é▌Åêù¥
  1307. *
  1308. *    input    none
  1309. *    output    none
  1310. *    break    none
  1311. *******************************************************
  1312. int4c
  1313.         movem.l    d0/a0/a6,-(sp)
  1314.         move.l    work_adrs(pc),a6
  1315.         lea.l    Key_work(a6),a0
  1316.  
  1317.         moveq.l    #0,d0
  1318.         move.b    $e8802f,d0
  1319.         pea.l    int4c_end(pc)
  1320.         add.b    d0,d0
  1321.         bcc    keyon_sub    ╖░╡▌Åêù¥
  1322.         bra    keyoff_sub
  1323. int4c_end
  1324.         movem.l    (sp)+,d0/a0/a6
  1325.         move.l    int4c_bak(pc),-(sp)
  1326.         rts
  1327.  
  1328. *----------------------------
  1329. *╖░╡▌Åêù¥
  1330. *    d0.w    ╖░╜╖¼▌║░─▐*2
  1331. *----------------------------
  1332. keyon_sub
  1333.         add.l    d0,a0
  1334.         add.w    d0,d0
  1335.         add.l    d0,a0
  1336.         cmp.w    #$ffff,(a0)
  1337.         bne    @f            ╖░╡▌Æå
  1338.  
  1339.     *TV ctrl╖░é¬ô»Ä₧ëƒé╡é╠╖░╡▌é═üAû│Äï
  1340.     *----------------------
  1341.         btst.b    #3,Sys_flag3(a6)
  1342.         bne    keyon_sub_set_time    TV ctrl╖░éαê┌ô«ìéæ¼ë╗╖░é╞é╡é─ï¡ÉºÄgùp
  1343.  
  1344.         cmp.w    #$ffff,Key_work+K_Shift*6(a6)
  1345.         bne    @f            Shifté¬ëƒé│éΩé─éóéΘ
  1346.  
  1347.         btst.b    #0,$ed0027
  1348.         bne    keyon_sub_set_time    Opt.2é═TVctrl╖░é┼é═é╚éó
  1349.         cmp.w    #$ffff,Key_work+K_Opt2*6(a6)
  1350.         bne    @f            Opt2é¬ëƒé│éΩé─éóéΘ
  1351.  
  1352.     *╖░╡▌èJÄnÄ₧è╘é≡É▌ÆΦ
  1353.     *------------------------
  1354. keyon_sub_set_time
  1355.         move.w    $9cc.w,(a0)
  1356.         clr.w    2(a0)
  1357. @@
  1358.         rts
  1359. *----------------------------
  1360. *╖░╡╠Åêù¥
  1361. *    d0.w    ╖░╜╖¼▌║░─▐*2
  1362. *----------------------------
  1363. keyoff_sub
  1364.         add.l    d0,a0
  1365.         add.w    d0,d0
  1366.         add.l    d0,a0
  1367.         move.w    (a0),d0
  1368.         cmp.w    #$ffff,d0
  1369.         beq    keyoff_sub_end    é╖é┼é╔╖░╡╠é╔é╚é┴é─éóéΘ
  1370.  
  1371.         *╖░╡╠Ä₧è╘é≡îvÄZ
  1372.         *----------------------
  1373.         sub.w    $9cc.w,d0
  1374.         bcc    @f        ╡░╩▐░╠█░é╡é─éóé╚éó
  1375.         add.w    $9ca.w,d0
  1376. @@
  1377.         add.w    d0,d0
  1378.  
  1379.     *╪╦▀░─Æåé╠ÅΩìçüA╖░╡╠é▄é┼é╠Ä₧è╘é≡╖░╡▌Ä₧è╘é╔ë┴ÄZ
  1380.     *----------------------
  1381.         cmp.w    #$fffe,2(a0)
  1382.         beq    keyoff_sub_1    ╪╦▀░─èJÄnæ╥é┐é╛é┴é╜
  1383.         bhi    @f        ╪╦▀░─Æå
  1384.  
  1385.         *╖░╡▌é⌐éτ╖░╡╠é▄é┼üA╖░╡▌Ä₧è╘é≡ô╟é▄éΩé╚é⌐é┴é╜ÅΩìçé╠Åêù¥
  1386.         *--------------------
  1387.         sub.w    #20*2,d0
  1388.         bhi    @f
  1389.         moveq.l    #1,d0
  1390. @@
  1391.         add.w    d0,4(a0)    ╖░╪╦▀░─èJÄné⌐éτ╖░╡╠é▄é┼é╠Ä₧è╘é≡ë┴ÄZ
  1392. keyoff_sub_1
  1393.         move.w    #$ffff,(a0)    ╖░╡╠Æå╠╫╕▐É▌ÆΦ
  1394. keyoff_sub_end
  1395.         rts
  1396. *******************************************************
  1397. *
  1398. *    MouseÄ≤ÉM╖¼╫╕└èäéΦì₧é▌Åêù¥ôαé⌐éτ║░┘é│éΩéΘ═▐╕└é╠ôαé╠
  1399. *    êΩé┬é╠Åêù¥
  1400. *
  1401. *    input    a1.l    ╧│╜├▐░└é╠▒─▐┌╜
  1402. *    output    none
  1403. *    break    none
  1404. *******************************************************
  1405. mouse_int
  1406.         movem.l    d0/a0/a6,-(sp)
  1407.         move.l    work_adrs(pc),a6
  1408.  
  1409. *ì╢╬▐└▌é╠Åêù¥
  1410. *----------------------------
  1411.         lea.l    Mouse_work(a6),a0
  1412.         moveq.l    #0*2,d0
  1413.  
  1414.         pea.l    mouse_int_left_end(pc)    û▀éΦ▒─▐┌╜
  1415.         btst.b    #1,(a1)
  1416.         bnz    keyon_sub    ╖░╡▌Åêù¥
  1417.         bra    keyoff_sub
  1418. mouse_int_left_end
  1419.  
  1420. *ëE╬▐└▌é╠Åêù¥
  1421. *----------------------------
  1422.         lea.l    Mouse_work(a6),a0
  1423.         moveq.l    #1*2,d0
  1424.         pea.l    mouse_int_right_end(pc)    û▀éΦ▒─▐┌╜
  1425.         btst.b    #0,(a1)
  1426.         bnz    keyon_sub    ╖░╡▌Åêù¥
  1427.         bra    keyoff_sub
  1428. mouse_int_right_end
  1429.  
  1430.         movem.l    (sp)+,d0/a0/a6
  1431.         move.l    mouse_sub_bak(pc),a0
  1432.         jmp    (a0)
  1433.  
  1434. ******************************************************************************
  1435. *
  1436. *   homeê╩Æué≡Åπê╩âAâvâèùpé╔É▌ÆΦ
  1437. *
  1438. *    ôⁿù═    d2.w    X
  1439. *        d3.w    Y
  1440. *
  1441. ******************************************************************************
  1442. .xdef    set_HOME_wait
  1443. set_HOME_wait
  1444.  
  1445.     *ïAÉⁿè·è╘æ╥é┐
  1446.     *---------------------
  1447. @@
  1448.     btst.b    #4,$e88001
  1449.     beq    @b
  1450. @@
  1451.     btst.b    #4,$e88001
  1452.     bnz    @b
  1453.  
  1454. .xdef    set_HOME
  1455. set_HOME
  1456.     move.w    d2,Home_X(a6)
  1457.     move.w    d3,Home_Y(a6)
  1458.  
  1459.     moveq.l    #$00,d1
  1460.     IOCS    _HOME
  1461.     rts
  1462.  
  1463. .xdef    set_HOME_for_apli
  1464. set_HOME_for_apli
  1465.     move.w    Home_X(a6),d2
  1466.     move.w    Home_Y(a6),d3
  1467.  
  1468.     moveq.l    #$00,d1
  1469.     IOCS    _SCROLL
  1470.     moveq.l    #$01,d1
  1471.     IOCS    _SCROLL
  1472.     moveq.l    #$02,d1
  1473.     IOCS    _SCROLL
  1474.     moveq.l    #$03,d1
  1475.     IOCS    _SCROLL
  1476.     rts
  1477.  
  1478. ******************************************************************************
  1479. *
  1480. *   ëµæ£é╠homeê╩Æué≡(0,0)é╔ò╧ìX
  1481. *
  1482. *    ôⁿù═    Home_X(a6)
  1483. *        Home_Y(a6)
  1484. *    Åoù═    û│é╡
  1485. *    öjë≤
  1486. ******************************************************************************
  1487. .xdef pic_home_adjust
  1488. pic_home_adjust
  1489.  
  1490.         btst.b    #5,Sys_flag3(a6)
  1491.         beq    pic_home_adjust_end    òΓÉ│ùvïüû│é╡
  1492.  
  1493.         move    Home_Y(a6),d1
  1494.         move    Home_X(a6),d0
  1495.         move.w    d0,d2
  1496.         or.w    d1,d2
  1497.         beq    pic_home_adjust_end    é╖é┼é╔Homeê╩Æué═(0,0)é┼éáéΘ
  1498.  
  1499.         movem.w    d0/d1,-(sp)
  1500.  
  1501.         moveq.l    #0,d2
  1502.         moveq.l    #0,d3
  1503.         bsr    set_HOME
  1504.  
  1505.         movem.w    (sp)+,d0/d1
  1506.  
  1507.         move.w    #512,d7
  1508.         moveq.l    #0,d4
  1509.         bra    pic_home_adjust_start
  1510.  
  1511. pic_home_adjust_loop
  1512.  
  1513.         cmp.w    d3,d4
  1514.         bne    1f
  1515.  
  1516.         lea.l    em_free_adrs(a6),a0
  1517.         move.l    #512/8-1,d2
  1518. @@
  1519.         move.l    (a0)+,(a1)+
  1520.         move.l    (a0)+,(a1)+
  1521.         move.l    (a0)+,(a1)+
  1522.         move.l    (a0)+,(a1)+
  1523.         dbra.w    d2,@b
  1524.  
  1525.         addq.w    #1,d4
  1526.         and.w    #$1ff,d4
  1527.  
  1528. pic_home_adjust_start
  1529.  
  1530.         move.w    d4,d3
  1531.         lea.l    em_free_adrs(a6),a0
  1532. 1
  1533.         lea.l    $c00000,a1
  1534.         moveq.l    #0,d2
  1535.         move.w    d3,d2
  1536.         lsl.l    #8,d2
  1537.         lsl.l    #2,d2
  1538.         add.l    d2,a1
  1539.         bsr    get_VRAM_adjust_X
  1540.  
  1541. pic_home_adjust_next
  1542.  
  1543.         add.w    d1,d3
  1544.         and.w    #$1ff,d3
  1545.  
  1546.         move.l    a1,a0
  1547.         dbra.w    d7,pic_home_adjust_loop
  1548.  
  1549. pic_home_adjust_end
  1550.  
  1551.         rts
  1552.  
  1553. *******************************
  1554. *VRAMô╟é▌ì₧é▌
  1555. *
  1556. *    ôⁿù═    d0    Xé╠Homeê╩Æu
  1557. *        a0    ÄµéΦì₧é▌╩▐»╠º▒─▐┌╜
  1558. *        a1    VRAM▒─▐┌╜
  1559. *    Åoù═    é╚é╡
  1560. *    öjë≤    d2,a0,a2
  1561. *******************************
  1562. get_VRAM_adjust_X
  1563.     *ëEæñĵéΦì₧é▌
  1564.     *------------------------
  1565.         movea.l    a1,a2
  1566.         add.w    d0,a2
  1567.         add.w    d0,a2
  1568.  
  1569.         move.w    #512,d2
  1570.         sub.w    d0,d2
  1571.  
  1572.         *█▌╕▐▄░─▐é┼ô]æùé╡é╜ù]éΦ
  1573.         *-------------------
  1574.         lsr.w    d2
  1575.         bcc    @f            ô]æù─▐»─Éöé═ï⌠Éö
  1576.         move.w    (a2)+,(a0)+
  1577. @@
  1578.         *█▌╕▐▄░─▐*2é┼ô]æùé╡é╜ù]éΦ
  1579.         *-------------------
  1580.         lsr.w    d2
  1581.         bcc    @f            ô]æù─▐»─Éöé═éSé╠ö{Éö
  1582.         move.l    (a2)+,(a0)+
  1583. @@
  1584.         *█▌╕▐▄░─▐*2é┼ô]æù
  1585.         *-----------------
  1586.         subq.w    #1,d2
  1587.         bcs    1f
  1588. @@        move.l    (a2)+,(a0)+
  1589.         move.l    (a2)+,(a0)+
  1590.         dbra.w    d2,@b
  1591. 1
  1592.     *ì╢æñĵéΦì₧é▌
  1593.     *------------------------
  1594.         movea.l    a1,a2
  1595.         move.w    d0,d2
  1596.         beq    get_VRAM_adjust_X_end
  1597.  
  1598.         *█▌╕▐▄░─▐é┼ô]æùé╡é╜ù]éΦ
  1599.         *-------------------
  1600.         lsr.w    d2
  1601.         bcc    @f            ô]æù─▐»─Éöé═ï⌠Éö
  1602.         move.w    (a2)+,(a0)+
  1603. @@
  1604.         *█▌╕▐▄░─▐*2é┼ô]æùé╡é╜ù]éΦ
  1605.         *-------------------
  1606.         lsr.w    d2
  1607.         bcc    @f            ô]æù─▐»─Éöé═4é╠ö{Éö
  1608.         move.l    (a2)+,(a0)+
  1609. @@
  1610.         *█▌╕▐▄░─▐*2é┼ô]æù
  1611.         *-----------------
  1612.         subq.w    #1,d2
  1613.         bcs    get_VRAM_adjust_X_end
  1614. @@        move.l    (a2)+,(a0)+
  1615.         move.l    (a2)+,(a0)+
  1616.         dbra.w    d2,@b
  1617. get_VRAM_adjust_X_end
  1618.         rts
  1619. ******************************************************************************
  1620. *
  1621. *   square.s
  1622. *
  1623. ******************************************************************************
  1624. Square
  1625.     moveq.l  #$16,d1
  1626.     move.l  #$E80029,a1
  1627.     iocs    _B_BPOKE
  1628.  
  1629.     moveq.l  #$0e,d1
  1630.     lea.l   $e80003-$e80029-1(a1),a1
  1631.     iocs    _B_BPOKE
  1632.  
  1633.     moveq.l  #$2c,d1
  1634.     addq.l   #$E80005-$e80003-1,a1
  1635.     iocs    _B_BPOKE
  1636.  
  1637.     moveq.l  #$6c,d1
  1638.     addq.l   #$E80007-$e80005-1,a1
  1639.     iocs    _B_BPOKE
  1640.  
  1641.     move.w   #$0089,d1
  1642.     subq.l   #$e80007+1-$E80000,a1
  1643.     iocs    _B_WPOKE
  1644.     rts
  1645.  
  1646. ******************************************************************************
  1647. *    âeâLâXâgëµû╩é≡âNâèâAé╖éΘ
  1648. ******************************************************************************
  1649. cls_text
  1650.         move.w    #2,-(sp)
  1651.         move.w    #10,-(sp)
  1652.         DOS    _CONCTRL
  1653.         addq.l    #4,sp
  1654.         rts
  1655. ******************************************************************************
  1656. *
  1657. *  âeâôâ|âëâèâtâ@âCâïé≡ò┬é╢é─ìφÅ£é╖éΘ
  1658. *
  1659. ******************************************************************************
  1660.     .xdef    close_temp
  1661. close_temp
  1662.  
  1663.     bclr.b    #2,Sys_flag(a6)
  1664.     beq    @f
  1665.  
  1666.     move.w    temp_handle(a6),-(sp)
  1667.     dos    _CLOSE
  1668.  
  1669.     pea.l    temp_path(a6)
  1670.     dos    _DELETE
  1671.     addq.l    #4+2,sp
  1672.  
  1673. @@
  1674.     rts
  1675.  
  1676.  
  1677. *
  1678.   .end
  1679.  
  1680.